import axios from 'axios'
// 引入进度条
import nprogress from 'nprogress'
// 引入进度条相关样式
import 'nprogress/nprogress.css'
// 从 store 中得到 token
import store from '@/store'
import { getToken } from '@/utils/auth'

// 1. 利用 axios 对象的create方法，创建axios实例
const fetch = axios.create({
  // 添加基础路径
  baseURL: 'http://localhost:8282',
  // 配置超时时间
  timeout: 5000
})
// 配置请求拦截器：在发送请求之前，
fetch.interceptors.request.use(config => {
  if (store.getters.token) {
    // 每次向服务器发送请求携带token字段
    config.headers['token'] = getToken()
  }
  // 返回响应的配置对象,对象里面包含一个重要的属性：header请求头
  nprogress.start() // 进度条开始执行
  return config
})
// 配置响应拦截器
fetch.interceptors.response.use(res => {
  // 成功的回调，直接返回封装的响应数据报
  nprogress.done() // 进度条结束执行
  return res.data
}, () => {
  // 失败的回调直接抛出 Error 终结
  return Promise.reject(new Error('whoops'))
})

export default fetch
